﻿/*
* 身份: 炉啊配置.h
* 配置文件为炉啊
* 瞧版权笔记在炉啊.h内
*/

#ifndef 炉啊配置_喝
#define 炉啊配置_喝

#include <limits.h>
#include <stddef.h>

/*
*一般配置文件为炉啊
* **这里的一些定义可以从外部更改，通过编译器(例如，带有'-D'选项)。被保护的
** '#if !定义'守卫'。然而，其他一些定义应该
**应用程序二进制接口,可以在这里直接更改，
*因为它们会影响炉啊通过在这里进行更改，您可以确保所有的软件
**连接到炉啊，如C库，将与* *相同的配置);或者因为他们很少被改变。
* 
* ***搜索"@@"以找到所有可配置的定义。
*/

/* **系统配置:用于(如果需要)炉啊的宏
**特定平台，例如限制为C89。
*/

/*
* @@ 炉啊艾_最大西栈 定义了嵌套调用的最大深度
**还限制了其他递归算法的最大深度实现，比如句法分析。一个价值
** 太大可能会导致解释器崩溃(C-栈溢出)。默认值对于普通机器似乎可以，但可能是
**对于受限制的硬件来说太高了。
**测试文件 '西栈.炉啊' 可能有助于找到一个好的限制。
**(它会因为限制太高而崩溃。)
*/

#if !defined(炉啊艾_最大西栈)
#define 炉啊艾_最大西栈    2000
#endif 

/*
* @@  炉啊_用_C89 控制 非-iso-c89 特性的使用。
**如果您希望Lua避免使用一些C99特性，请定义它
**或Windows上特定的功能。
*/
/* #define 炉啊_用_C89 */

/* 默认情况下，Windows上的炉啊使用(某些)特定的Windows特性*/
#if !defined(炉啊_用_C89) && defined(_WIN32) && !defined(_WIN32_WCE)
#define 炉啊_用_WINDOWS /* 为常规窗口启用好东西 */
#endif 

#if defined(炉啊_用_WINDOWS)
#define 炉啊_迪嘞_DLL  /* 打开支持为DLL */
#define 炉啊_用_C89  /* 广泛地,Windows 是 C89*/
#endif 

#if defined(炉啊_用_LINUX)
#define 炉啊_用_POSIX
#define 炉啊_用_迪嘞开 /* 需要一个额外库: -ldl */
#endif

#if defined(炉啊_用_MACOSX)
#define 炉啊_用_POSIX
#define 炉啊_用_迪嘞开  /* Macos 不需要 -ldl */
#endif

/* @@ 炉啊艾_是否32整型 是真的，因为“int”(至少)有32位。*/
#define 炉啊艾_是否32整型    ((由整型_最大 >> 30) >= 3)

/* 号码类型的配置 */
/* 炉啊_32位 打开炉啊的 32位整数 与 32位浮点 */
/* #define 炉啊_32位 */

/* @@ 炉啊_C89_号码 确保炉啊使用最大的可用类型 
* c89('long' 与 'double' ); Windows总是有'__int64',
* 所以它不需要使用这种情况
*/

#if defined(炉啊_用_C89) && !defined(炉啊_用_WINDOWS)
#define 炉啊_C89_号码
#endif

/*
* @@ 炉啊_整型_类型 定义了炉啊整数的类型。
@@ 炉啊_浮点_类型 定义了炉啊浮动的类型。
** 炉啊在支持这些选项的任何组合时都可以正常工作由你的C编译器。
*通常的配置是64位整数
**和'double'(默认值)，32位整数和'float'(用于和'long'/'double'(对于C编译器来说不是这样的
**兼容C99，它可能不支持'long long')。
*/

/* 预定义选项为 炉啊_整型_类型 */
#define 炉啊_整型_整型    1
#define 炉啊_整型_长型    2
#define 炉啊_整型_长长型   3

/* 预定义选项为 炉啊_浮点_类型 */
#define 炉啊_浮点_浮点    1
#define 炉啊_浮点_双      2
#define 炉啊_浮点_长双    3

#if defined(炉啊_32位) 
/* 32位整数与浮点 */
#if 炉啊艾_是否32整型 /* 用 '整型' 若足够大 */
#define 炉啊_整型_类型  炉啊_整型_整型
#else  /* 其它用 '长型' */
#define 炉啊_整型_类型  炉啊_整型_长型
#endif
#define 炉啊_浮点_类型  炉啊_浮点_浮点

#elif defined(炉啊_C89_号码)
/* 可提供的最大类型为C89( '长型' 与 '双' )*/
#define 炉啊_整型_类型   炉啊_整型_长型
#define 炉啊_浮点_类型   炉啊_浮点_双
#endif

/* 64位炉啊的默认配置 ('长长型 和 双') */
#if !defined(炉啊_整型_类型)
#define 炉啊_整型_类型    炉啊_整型_长长型
#endif

#if !defined(炉啊_浮点_类型)
#define 炉啊_浮点_类型    炉啊_浮点_双
#endif

/* 配置路径 */
/*
* 炉啊_路径_分隔 是在路径中分隔模板的字符。
* 炉啊_路径_标记 是标记模板中的替换点的字符串。
* Windows路径中的 炉啊_执行_目录 将被可执行文件的目录替换。
*/

#define 炉啊_路径_分隔    ";"
#define 炉啊_路径_标记    "?"
#define 炉啊_执行_目录    "!"

/*
* @@ 炉啊_路径_默认 是Lua用于查找Lua库的默认路径。
* @@ 炉啊_西路径_默认 是Lua用于查找C库的默认路径。
* 如果您的机器有一个非常规的目录层次结构，
* 或者如果您想在非常规的目录中安装您的库，请更改它们。
*/

#define 炉啊_版本目录    炉啊_版本_少校 "." 炉啊_版本_辅修
#if defined(_WIN32)

/*
* 在Windows中，
* 路径中的任何感叹号('!')都会被当前进程的可执行文件的目录路径替换。
*/

#define 炉啊_嘞目录 	"!\\炉啊\\"
#define 炉啊_西目录  	"!\\"
#define 炉啊_共享目录	"!\\..\\共享\\炉啊\\" 炉啊_版本目录 "\\"

#if !defined(炉啊_路径_默认)
#define 炉啊_路径_默认  \
		炉啊_嘞目录"?.炉啊;"  炉啊_嘞目录"?\\初始.炉啊;" \
		炉啊_西目录"?.炉啊;"  炉啊_西目录"?\\初始.炉啊;" \
		炉啊_共享目录"?.炉啊;" 炉啊_共享目录"?\\初始.炉啊;" \
		".\\?.炉啊;" ".\\?\\初始.炉啊"
#endif

#if !defined(炉啊_西路径_默认)
#define 炉啊_西路径_默认 \
		炉啊_西路径"?.dll;" \
		炉啊_西路径"..\\库\\炉啊\\" 炉啊_版本目录 "\\?.dll;" \
		炉啊_西路径"载全部.dll;" ".\\?.dll"
#endif

#else			/* }{ */

#define 炉啊_根	    "/用户/本地/"
#define 炉啊_嘞目录 	炉啊_根 "共享/炉啊/" 炉啊_版本目录 "/"
#define 炉啊_西目录 	炉啊_根 "库/炉啊/" 炉啊_版本目录 "/"

#if !defined(炉啊_路径_默认)
#define 炉啊_路径_默认  \
		炉啊_嘞目录"?.lua;"  炉啊_嘞目录"?/init.lua;" \
		炉啊_西目录"?.lua;"  炉啊_西目录"?/init.lua;" \
		"./?.lua;" "./?/init.lua"
#endif

#if !defined(炉啊_西路径_默认)
#define 炉啊_西路径_默认 \
		炉啊_西目录"?.so;" 炉啊_西目录"loadall.so;" "./?.so"
#endif

#endif

/*
* @@ 炉啊_目录分隔 是目录分隔符(用于子模块)。
如果您的机器不使用“/”作为目录分隔符，
并且不是Windows，请更改它。(在Windows Lua上自动使用“\”。)
*/

#if !defined(炉啊_目录分隔)

#if defined(_WIN32)
#define 炉啊_目录分隔	"\\"
#else
#define 炉啊_目录分隔	"/"
#endif

#endif

/* C代码中导出符号的标记 */
/*
* @@ 炉啊_应用程序接口 是所有核心API函数的标记。
* @@ 炉啊库_应用程序接口 是所有辅助库函数的标记。
* @@ 炉啊模_应用程序接口 是所有标准库打开函数的标记。
**如果需要以某种特殊的方式定义这些函数，请更改它们。
**例如，如果您想要创建一个带有核心和库的Windows DLL，
您可能需要使用以下定义(定义 炉啊_建造_于_DLL 来获得它)。
*/

#if defined(炉啊_建造_于_DLL)	/* { */

#if defined(炉啊_核) || defined(炉啊_库)	/* { */
#define 炉啊_应用程序接口 __declspec(dllexport)
#else						/* }{ */
#define 炉啊_应用程序接口 __declspec(dllimport)
#endif						/* } */

#else				/* }{ */

#define 炉啊_应用程序接口		extern

#endif				/* } */

/* 多数情况下，库和内核是一起的。*/
#define 炉啊库_应用程序接口	炉啊_应用程序接口
#define 炉啊模_应用程序接口	炉啊_应用程序接口

/*
*@@ 炉啊艾_函 是所有不在的 extern 函数的标记
***导出到外部模块。@@ 炉啊艾_迪定义 和 炉啊艾_迪声明 是所有 extern (const) 变量的标记，
***不需要导出到外部模块 (炉啊艾_迪定义
***定义和 炉啊艾_迪声明 用于声明)。
***如果需要用特殊的方式标记，请更改它们。精灵/ gcc
***(3.2及更高版本)将其标记为“隐藏”以优化访问
***当Lua被编译为共享库时。并非所有精灵目标都支持
** *这个属性。不幸的是，gcc没有提供检查的方法
***目标是否提供支持，以及那些没有支持的人给个警告。要避免这些警告，请更改为
** *默认定义。
*/

#if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_辅修__) >= 302) && \
    defined(__ELF__)		/* { */
#define 炉啊艾_函	__attribute__((可视("内部"))) extern
#else				/* }{ */
#define 炉啊艾_函	extern
#endif				/* } */

#define 炉啊艾_迪声明(声明)	炉啊艾_函 声明
#define 炉啊艾_迪定义	/* 空的 */

/* 与以前版本的兼容性 */
/*
@@ 炉啊_兼容_5_3 控制其他宏，以便与Lua 5.3兼容。
您可以定义它来获取所有选项，或更改特定选项
**以满足您的特殊需要。
*/
#if defined(炉啊_兼容_5_3)	/* { */

/*
@@ 炉啊_兼容_数学库 控制出现几个不赞成的数学库中的
**函数。这些函数在5.3中已经被正式删除;
不过，它们在这里仍然可以买到。)
*/
#define 炉啊_兼容_数学库

/*
@@ 炉啊_兼容_应用程序接口整型投掷 控制宏的存在,
**操作其他整数类型(炉啊_推无符号, 炉啊_到无符号，
** 炉啊嘞_检查整型, 炉啊嘞_检查长型 等)这些宏在5.3中也被正式删除了，
但是它们仍然是* *。)
*/

#define 炉啊_兼容_应用程序接口整型投掷

/*
@@ 炉啊_兼容_小于_小等 控制"__小等"元方法的模拟
* *使用 "__小于"。
*/
#define 炉啊_兼容_小于_小等

/*
下面的宏提供了一些简单的兼容性
** 应用程序接口 的变化。宏本身记录了如何这样做
**更改代码以避免使用它们。同样，这些宏在5.3中被正式删除，
但是它们确实被删除了
**此处仍可下载。)
*/
#define 炉啊_串长(嘞,艾)		炉啊_原始长(嘞, (艾))

#define 炉啊_对象长(嘞,艾)		炉啊_原始长(嘞, (艾))

#define 炉啊_等于(嘞,索引1,索引2)		炉啊_对比(嘞,(索引1),(索引2),炉啊_操作等于)
#define 炉啊_小于(嘞,索引1,索引2)	炉啊_对比(嘞,(索引1),(索引2),炉啊_操作小于)

#endif				/* } */

/*
** {==================================================================
**号码配置。
**如果没有预定义的 炉啊_浮点_* / 炉啊_整型_*，
请更改这些定义满足您的需要。
** ===================================================================
*/
/*
@@ 炉啊_号码 是炉啊使用的浮点类型。
@@ 炉啊艾_默认参数号码 是"默认参数提升"的结果
@@超过一个浮点数。
@@ 嘞_浮点属性(斯) 将浮点属性 "斯" 更正为正确的浮点类型
**以 浮/双浮/长双浮 之一作为前缀。
@@ 炉啊_号码_浮点长度写修饰 是用于编写浮点数的长度修饰符。
@@ 炉啊_号码_浮点格式 是用于编写浮点数的格式。
@@ 炉啊_号码到串 将浮点数转换为字符串。
@@ 嘞_数学操作 允许在所有数学运算中添加"嘞"或 "弗"。
@@ 嘞_楼层 占用了浮点楼层。
@@ 炉啊_串到号码 将十进制号码转换为号码。
*/

/* 下面的定义适用于大多数情况 */
#define 嘞_楼层(斯)		(嘞_数学操作(楼层)(斯))

#define 炉啊_号码到串(丝,丝只,恩)  \
	嘞_丝格式打印((丝), 丝只, 炉啊_号码_浮点格式, (炉啊艾_默认参数号码)(恩))

/*
@@ 炉啊_号码到整数 将浮点数转换为整数
**为整数，如果浮点 不在的范围内，则返回0
** 炉啊_整数. （由于
**舍入. 这里的测试假设采用两个补码表示，
** 最小整数 始终以浮点数精确表示；
** 最大整数 可能没有，因此转换为整数
**的值可能不确定。）
*/
#define 炉啊_号码到整数(恩,匹) \
  ((恩) >= (炉啊_号码)(炉啊_最小整数) && \
   (恩) < -(炉啊_号码)(炉啊_最小整数) && \
      (*(匹) = (炉啊_整数)(恩), 1))

/* 现在是变量定义 */
#if 炉啊_浮点_类型 == 炉啊_浮点_浮点		/* { 单浮点 */

#define 炉啊_号码	float

#define 嘞_浮点属性(恩)		(浮_##恩)

#define 炉啊艾_默认参数号码	  double

#define 炉啊_号码_浮点长度写修饰	""
#define 炉啊_号码_浮点格式		"%.7g"

#define 嘞_数学操作(操作)		操作##弗

#define 炉啊_串到号码(丝,匹)	strtof((丝), (匹))

#elif 炉啊_浮点_类型 == 炉啊_浮点_长双	/* }{ 长双 */

#define 炉啊_号码	long double

#define 嘞_浮点属性(恩)		(长双浮_##恩)

#define 炉啊艾_默认参数号码	long double

#define 炉啊_号码_浮点长度写修饰	"嘞"
#define 炉啊_号码_浮点格式		"%.19Lg"

#define 嘞_数学操作(操作)		操作##嘞

#define 炉啊_串到号码(丝,匹)	strtold((丝), (匹))

#elif 炉啊_浮点_类型 == 炉啊_浮点_双	/* }{ 双 */

#define 炉啊_号码	double

#define 嘞_浮点属性(恩)		(双浮_##恩)

#define 炉啊艾_默认参数号码	double

#define 炉啊_号码_浮点长度写修饰	""
#define 炉啊_号码_浮点格式		"%.14g"

#define 嘞_数学操作(操作)		操作

#define 炉啊_串到号码(丝,匹)	strtod((丝), (匹))

#else						/* }{ */

#error "未定义数字浮点类型"

#endif					/* } */

/*
@@ 炉啊_整数 是 炉啊 使用的整数类型。
**
@@ 炉啊_无符号 是 炉啊_整数 的未签名版本。
**
@@ 炉啊艾_默认参数整型 是"默认参数提升"的结果
@@ 通过 炉啊_整数 .
@@ 炉啊_整数_整数长度读写修饰 是用于读取/写入整数的长度修饰符。
@@ 炉啊_整数_整数格式 是用于写入整数的格式。
@@ 炉啊_最大整数 是 炉啊_整数 的最大值。
@@ 炉啊_最小整数 是 炉啊_整数 的最小值。
@@ 炉啊_最大无符号 是 炉啊_无符号 的最大值。
@@ 炉啊_无符号位 是 炉啊_无符号 中的位数。
@@ 炉啊_整数到串 将整数转换为字符串。
*/

/* 以下定义适用于大多数情况 */
#define 炉啊_整数_整数格式		"%" 炉啊_整数_整数长度读写修饰 "迪"

#define 炉啊艾_默认参数整型		炉啊_整数

#define 炉啊_整数到串(丝,丝只,恩)  \
	嘞_丝格式打印((丝), 丝只, 炉啊_整数_整数格式, (炉啊艾_默认参数整型)(恩))

/*
**在这里使用 炉啊艾_默认参数整型 可以避免促销问题（
**可以将无符号之间的比较转换为有符号比较）
*/
#define 炉啊_无符号		unsigned 炉啊艾_默认参数整型


#define 炉啊_无符号位	(sizeof(炉啊_无符号) * 印刻_位)

/* 现在是变量定义 */
#if 炉啊_整型_类型 == 炉啊_整型_整型		/* { 整型 */

#define 炉啊_整数		int
#define 炉啊_整数_整数长度读写修饰	""

#define 炉啊_最大整数		整型_最大
#define 炉啊_最小整数		整型_最小

#define 炉啊_最大无符号		由整型_最大

#elif 炉啊_整型_类型 == 炉啊_整型_长	/* }{ 长 */

#define 炉啊_整数		long
#define 炉啊_整数_FRMLEN	"嘞"

#define 炉啊_最大整数		长_最大
#define 炉啊_最小整数		长_最小

#define 炉啊_最大无符号		由长_最大

#elif 炉啊_整型_类型 == 炉啊_整型_长长型	/* }{ 长长 */

/* 使用宏 嘞长_最大 的存在作为C99合规性的代理 */
#if defined(嘞长_最大)		/* { */
/* 使用ISO C99的东西 */

#define 炉啊_整数		long long
#define 炉啊_整数_整数长度读写修饰	"嘞嘞"

#define 炉啊_最大整数		嘞长_最大
#define 炉啊_最小整数		嘞长_最小

#define 炉啊_最大无符号		由嘞长_最大

#elif defined(炉啊_用_WINDOWS) /* }{ */

/* 在Windows中，可以使用特定的Windows类型 */
#define 炉啊_整数		__int64
#define 炉啊_整数_整数长度读写修饰	"艾64"

#define 炉啊_最大整数		_艾64_最大
#define 炉啊_最小整数		_艾64_最小

#define 炉啊_最大无符号		_由艾64_最大

#else				/* }{ */

#error "编译器不支持 '长长'. 使用选项' -迪炉啊_32位'\
  或 '-迪炉啊_C89_号码' (看文件 '炉啊配置.h' 为 细节)"

#endif				/* } */

#else				/* }{ */

#error "未定义数字整数类型"

#endif				/* } */

/*
** {==================================================================
** 与C99和其他C细节的依赖关系
** ===================================================================
*/
/*
@@ 嘞_丝格式打印 等效于C89中的'snprintf'或'sprintf'。
**（炉啊中的所有用途都只有一个格式项。）
*/

#if !defined(炉啊_用_C89)
#define 嘞_丝格式打印(丝,丝只,弗,艾)	snprintf(丝,丝只,弗,艾)
#else
#define 嘞_丝格式打印(丝,丝只,弗,艾)	((void)(丝只), sprintf(丝,弗,艾))
#endif

/*
@@ 炉啊_串斯到号码 将十六进制数字转换为数字。
**在C99中，"strtod" 执行该转换。 否则，您可以
**保留'炉啊_串斯到号码' 的定义，炉啊 将提供自己的
**实施。
*/
#if !defined(炉啊_用_C89)
#define 炉啊_串斯到号码(丝,匹)		炉啊_串到号码(丝,匹)
#endif

/*
@@ 炉啊_指针到串 将指针转换为
**非指定方式。
*/
#define 炉啊_指针到串(缓冲,丝只,匹)	 嘞_丝格式打印(缓冲,丝只,"%p",匹)

/*
@@ 炉啊_号码到串斯 将浮点数转换为十六进制数字。
**在C99中，'sprintf'（格式说明符为 '%a'/'%A'）执行此操作。
**否则，您可以将 '炉啊_号码到串斯' 保留为未定义状态，Lua将
**提供自己的实现。
*/
#if !defined(炉啊_用_C89)
#define 炉啊_号码到串斯(嘞,哔,丝只,弗,恩)  \
	((void)嘞, 嘞_丝格式打印(哔,丝只,弗,(炉啊艾_默认参数号码)(恩)))
#endif

/*
**数学函数的'strtof'和'opf'变体在
** C89中。 否则，宏"HUGE_VALF"是测试
**这些变体的可用性。 （"math.h"已包含在
**使用这些宏的所有文件。）
*/
#if defined(炉啊_用_C89) || (defined(HUGE_VAL) && !defined(HUGE_VALF))
#undef 嘞_数学操作  /* 变体不可用 */
#undef 炉啊_串到号码
#define 嘞_数学操作(操作)		(炉啊_号码)操作  /* 无变体 */
#define 炉啊_串到号码(丝,匹)	((炉啊_号码)strtod((丝), (匹)))
#endif

/*
@@ 炉啊_颗上下文 是要继续的上下文类型（'ctx'）
** 功能。 它必须是数字类型； Lua将在以下情况下使用" intptr_t"
**可用，否则将使用'ptrdiff_t'（最接近的值
** C89中的'intptr_t'）
*/
#define 炉啊_颗上下文	ptrdiff_t

#if !defined(炉啊_用_C89) && defined(__STDC_VERSION__) && \
    __STDC_VERSION__ >= 199901L
#include <stdint.h>
#if defined(整型指针_最大)  /* 即使在C99中，此类型也是可选的 */
#undef 炉啊_颗上下文
#define 炉啊_颗上下文	intptr_t
#endif
#endif

/*
@@ 炉啊_取本地声明点 获取语言环境"基数字符"（小数点）。
**如果您不想使用C语言环境，请进行更改。 （使用这个的代码
**宏必须包含标头'locale.h'。）
*/
#if !defined(炉啊_取本地声明点)
#define 炉啊_取本地声明点()		(localeconv()->decimal_point[0])
#endif

/*
** {==================================================================
** 语言变化
** =====================================================================
*/
/*
@@ 炉啊_关闭转换号码到串 / 炉啊_关闭转换串到号码 控制Lua如何执行某些操作
**胁迫。 定义 炉啊_关闭转换号码到串 以关闭来自的自动强制
**数字为字符串。 定义 炉啊_关闭转换串到号码 以自动关闭
**从字符串到数字的强制转换。
*/
/* #define 炉啊_关闭转换号码到串 */
/* #define 炉啊_关闭转换串到号码 */

/*
@@ 炉啊_用_应用程序接口检查 在C API 上打开多个一致性检查。
**将其定义为调试C代码时的帮助。
*/

#if defined(炉啊_用_应用程序接口检查)
#include <assert.h>
#define 炉啊艾_应用程序接口检查(嘞,鹅)	assert(鹅)
#endif

/*
** {==================================================================
** 会影响API且必须稳定的宏（即，必须是
**编译Lua以及编译链接到的代码时相同
** Lua）。
** =====================================================================
*/

/*
@@ 炉啊艾_最大栈 限制Lua堆栈的大小。
**如果您需要其他限制，请更改它。 此限制是任意的；
**它的唯一目的是阻止Lua消耗无限的堆栈
**空间（并为伪索引保留一些数字）。
**（必须适合max（size_t）/ 32。）
*/
#if 炉啊艾_是否32整型
#define 炉啊艾_最大栈		1000000
#else
#define 炉啊艾_最大栈		15000
#endif

/*
@@ 炉啊_额外空间 定义与以下内容关联的原始内存区域的大小
** Lua状态，访问速度非常快。
**如果需要其他尺寸，请更改。
*/
#define 炉啊_额外空间		(sizeof(void *))

/*
@@ 炉啊_身份大小 给出了源描述的最大大小
@@ 调试信息中的函数。
** 如果您想要其他尺寸，请更改它。
*/
#define 炉啊_身份大小	60

/*
@@ 炉啊嘞_缓冲大小 是 嘞辅库 缓冲区系统使用的缓冲区大小。
*/
#define 炉啊嘞_缓冲大小   ((int)(16 * sizeof(void*) * sizeof(炉啊_号码)))

/*
@@ 炉啊艾_最大对齐 定义在联合中使用时可确保
**该联合中其他项目的最大对齐方式。
*/
#define 炉啊艾_最大对齐  炉啊_号码 恩; double 由; void *丝; 炉啊_整数 艾; long 嘞

/*
**本地配置。 您可以使用此空间添加重新定义
**无需修改文件的主要部分。
*/
#endif